package br.com.saab.quantotempofalta.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import org.apache.log4j.Logger;

/**
 * Classe que contém métodos úteis relacionados a data.
 * 
 * @author Felipe
 */
public class DataUtils {
	
	private static Logger log = Logger.getLogger(DataUtils.class);
	private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
	
	/**
	 * Adiciona a data atual (dd/MM/yyyy) em uma hora (HH:mm:ss).
	 */
	public static Date adicionaDataEmHora(String hora) {
		String[] horaSplit = hora.split(":");
		if (horaSplit.length != 3) {
			log.debug("Tá de sacanagem com erra hora né?!?!?! Tem que ser no formato HH:mm:ss!!!");
			return null;
		}
		
		Calendar c = Calendar.getInstance();
		c.set(Calendar.HOUR_OF_DAY, Integer.valueOf(horaSplit[0]));
		c.set(Calendar.MINUTE, Integer.valueOf(horaSplit[1]));
		c.set(Calendar.SECOND, Integer.valueOf(horaSplit[2]));
		c.set(Calendar.MILLISECOND, 0);
		
		log.debug(String.format("adicionaDataEmHora(%s) retornou %s", hora, sdf.format(c.getTime())));
		
		return c.getTime();
	}
	
	/**
	 * Formata uma data retornando apenas o tempo.
	 */
	public static String formataTempo(Date data) {
		long[] tempoSplited = splitTempo(data); 
		return String.format("%02dh, %02dm, %02ds", tempoSplited[0], tempoSplited[1], tempoSplited[2]);
	}
	
	/**
	 * Quebra a data em um vetor contendo [hora, minuto, segundo]. 
	 * 
	 * @return [hora, minuto, segundo]
	 */
	public static long[] splitTempo(Date data) {
		long diferencaEmHoras = TimeUnit.MILLISECONDS.toHours(data.getTime());
		long diferencaEmMinutos = TimeUnit.MILLISECONDS.toMinutes(data.getTime()) - TimeUnit.HOURS.toMinutes(diferencaEmHoras);
		long diferencaEmSegundos = TimeUnit.MILLISECONDS.toSeconds(data.getTime()) - TimeUnit.MINUTES.toSeconds(diferencaEmMinutos) - TimeUnit.HOURS.toSeconds(diferencaEmHoras);
		log.debug(String.format("splitTempo: %sh, %sm, %ss.", diferencaEmHoras, diferencaEmMinutos, diferencaEmSegundos));

		return new long[]{diferencaEmHoras, diferencaEmMinutos, diferencaEmSegundos};
	}

}
